home *** CD-ROM | disk | FTP | other *** search
/ Gold Medal Software 1 / Gold Medal Software Volume 1 (Gold Medal) (1994).iso / prog / tpwprog5.arj / METRICS.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1992-07-02  |  5.2 KB  |  238 lines

  1. { metrics.pas -- Display system metrics (completes WCDEMO.PAS) }
  2.  
  3. program Metrics;
  4.  
  5. uses WinCrt, WinTypes, WinProcs, Strings;
  6.  
  7. const
  8.  
  9.   maxChoice = 4;    { Number of menu selections }
  10.  
  11. {- Start a new display line }
  12. procedure NewLine;
  13. begin
  14.   WriteChar(#13);
  15.   WriteChar(#10)
  16. end;
  17.  
  18. {- PChar equivalent to Write }
  19. procedure Put(P: PChar);
  20. begin
  21.   WriteBuf(P, StrLen(P))
  22. end;
  23.  
  24. {- PChar equivalent to Writeln }
  25. procedure PutLn(P: PChar);
  26. begin
  27.   Put(P);
  28.   NewLine
  29. end;
  30.  
  31. {- Display string S centered at line Y }
  32. procedure Center(Y: Integer; S: PChar);
  33. begin
  34.   GotoXY(ScreenSize.X div 2 - StrLen(S) div 2, Y);
  35.   Put(S)
  36. end;
  37.  
  38. {- Display message, then continue after key press }
  39. procedure Pause;
  40. begin
  41.   NewLine;
  42.   Put('Press any key to continue...');
  43.   repeat { wait } until KeyPressed;
  44.   ReadKey
  45. end;
  46.  
  47. {- Display menu. Return true and choice in C; else return false }
  48. function GetChoice(var C: Integer): Boolean;
  49. begin
  50.   repeat
  51.     ClrScr;
  52.     Center( 3, 'M E N U');
  53.     Center( 4, '--------------------');
  54.     Center( 6, '1: System metrics   ');
  55.     Center( 8, '2: Keyboard type    ');
  56.     Center(10, '3: Windows directory');
  57.     Center(12, '4: System flags     ');
  58.     Center(15, '9: Exit             ');
  59.     Center(20, 'Enter selection number: ');
  60.     Readln(C)
  61.   until C in [1 .. maxChoice, 9];
  62.   GetChoice := C <> 9
  63. end;
  64.  
  65. {- Display statistic label }
  66. procedure WriteLabel(S: PChar);
  67. begin
  68.   WriteBuf(S, StrLen(S));
  69.   WriteChar(#32);
  70.   while Cursor.X < 40 do WriteChar('.');
  71.   WriteChar(' ')
  72. end;
  73.  
  74. {- Display system metrics }
  75. procedure PSystemMetrics;
  76.  
  77.   procedure ShowInt(S: PChar; Index: Integer);
  78.   begin
  79.     WriteLabel(S);
  80.     Writeln(GetSystemMetrics(Index))
  81.   end;
  82.  
  83.   procedure ShowBool(S: PChar; Index: Integer);
  84.   begin
  85.     WriteLabel(S);
  86.     if GetSystemMetrics(Index) = 0 then
  87.       Writeln('False')
  88.     else
  89.       Writeln('True')
  90.   end;
  91.  
  92. begin
  93.   ClrScr;
  94.   Writeln;
  95.   Writeln('System Metrics');
  96.   Writeln('--------------');
  97.   ShowInt('Screen width', sm_CXScreen);
  98.   ShowInt('Screen height', sm_CYScreen);
  99.   ShowInt('Window caption height', sm_CYCaption);
  100.   ShowInt('Icon width', sm_CXIcon);
  101.   ShowInt('Icon height', sm_CYIcon);
  102.   ShowBool('Mouse installed', sm_MousePresent);
  103.   ShowBool('Mouse buttons swapped', sm_SwapButton)
  104. end;
  105.  
  106. {- Display keyboard type }
  107. procedure PKeyboardType;
  108. const
  109.   keyboard = ' keyboard';  { Common string }
  110. var
  111.   P: PChar;
  112. begin
  113.   ClrScr;
  114.   Writeln;
  115.   Writeln('Keyboard Type');
  116.   Writeln('-------------');
  117.   case GetKeyboardType(0) of
  118.     1: P := 'IBM PC/XT or compatible 83-key';
  119.     2: P := 'Olivetti M24 102-key';
  120.     3: P := 'IBM AT or compatible 84-key';
  121.     4: P := 'IBM Enhanced 101- or 102-key';
  122.     5: P := 'Nokia 1050 or compatible';
  123.     6: P := 'Nokia 9140 or compatible';
  124.   else
  125.     P := 'Unknown';
  126.   end;
  127.   WriteBuf(P, StrLen(P));
  128.   WriteBuf(keyboard, StrLen(keyboard));
  129. end;
  130.  
  131. {- Display Windows' directory }
  132. procedure PWinDirectory;
  133. const
  134.   errorMsg = '***Error getting directory name';
  135. var
  136.   Buffer: array[0 .. 144] of Char;
  137.   N: Integer;
  138. begin
  139.   ClrScr;
  140.   Writeln;
  141.   Writeln('Windows Directory');
  142.   Writeln('-----------------');
  143.   N := GetWindowsDirectory(Buffer, 144);
  144.   if (N = 0) or (N > 144) then
  145.     WriteBuf(errorMsg, StrLen(errorMsg))
  146.   else
  147.     WriteBuf(Buffer, N)
  148. end;
  149.  
  150. {- Display system flags }
  151. procedure PSystemFlags;
  152. var
  153.   Flags: LongInt;
  154.  
  155.   procedure ShowBool(S: PChar; Mask: LongInt);
  156.   begin
  157.     WriteLabel(S);
  158.     if Flags and Mask = 0 then
  159.       Writeln('False')
  160.     else
  161.       Writeln('True')
  162.   end;
  163.  
  164.   procedure ShowCPU(S: PChar);
  165.   var
  166.     P: PChar;
  167.   begin
  168.     WriteLabel(S);
  169.     if Flags and wf_CPU086 <> 0 then
  170.       P := '8086'
  171.     else if Flags and wf_CPU186 <> 0 then
  172.       P := '80186'
  173.     else if Flags and wf_CPU286 <> 0 then
  174.       P := '80286'
  175.     else if Flags and wf_CPU386 <> 0 then
  176.       P := '80386'
  177.     else if Flags and wf_CPU486 <> 0 then
  178.       P := '80486'
  179.     else
  180.       P := 'Unknown';
  181.     WriteBuf(P, StrLen(P));
  182.     Writeln
  183.   end;
  184.  
  185.   procedure ShowMode(S: PChar);
  186.   var
  187.     P: PChar;
  188.   begin
  189.     WriteLabel(S);
  190.     if Flags and wf_Enhanced <> 0 then
  191.       P := '386 Enhanced'
  192.     else if Flags and wf_Standard <> 0 then
  193.       P := 'Standard'
  194.     else
  195.       P := 'Real';
  196.     WriteBuf(P, StrLen(P));
  197.     Writeln
  198.   end;
  199.  
  200. begin
  201.   ClrScr;
  202.   Writeln;
  203.   Writeln('System Metrics');
  204.   Writeln('--------------');
  205.   Flags := GetWinFlags;
  206.   ShowBool('Math coprocessor installed', wf_80x87);
  207.   ShowCPU('Processor (CPU) type');
  208.   ShowMode('Operating mode');
  209.   ShowBool('Protect mode', wf_PMode);
  210.   ShowBool('EMS large-frame configuration', wf_LargeFrame);
  211.   ShowBool('EMS small-frame configuration', wf_SmallFrame)
  212. end;
  213.  
  214. var
  215.  
  216.   Choice: Integer;
  217.  
  218. begin
  219.   while GetChoice(Choice) do
  220.   begin
  221.     case Choice of
  222.       1: PSystemMetrics;
  223.       2: PKeyboardType;
  224.       3: PWinDirectory;
  225.       4: PSystemFlags
  226.     end;
  227.     Writeln;
  228.     Pause
  229.   end;
  230.   DoneWinCrt
  231. end.
  232.  
  233.  
  234. {--------------------------------------------------------------
  235.   Copyright (c) 1991 by Tom Swan. All rights reserved.
  236.   Revision 1.00    Date: 4/05/1991
  237. ---------------------------------------------------------------}
  238.